class AppsRouter:
    """
    A router to control all database operations on models in the
    cews (and ) applications.
    """
    psql_app_labels = {'auth', 'contenttypes', 'sessions', 'admin', 'users', 'cews'}
    djongo_app_labels = {'hierarchy', 'eform'}

    def db_for_read(self, model, **hints):
        """
        Attempts to read auth and contenttypes models go to afc_psql.
        """
        if model._meta.app_label in self.psql_app_labels:
            return 'default'
        elif model._meta.app_label in self.djongo_app_labels:
            return 'mongo'
        return 'default'

    def db_for_write(self, model, **hints):
        """
        Attempts to write auth and contenttypes models go to afc_psql.
        """
        if model._meta.app_label in self.psql_app_labels:
            return 'default'
        if model._meta.app_label in self.djongo_app_labels:
            return 'mongo'
        return 'default'

    def allow_relation(self, obj1, obj2, **hints):
        """
        Allow relations if a model in the auth or contenttypes apps is
        involved.
        """
        # db_set = {'cews', 'hierarchy'}

        if (
            obj1._meta.app_label in self.psql_app_labels or
            obj2._meta.app_label in self.psql_app_labels
        ):
            return True
        elif (
            obj1._meta.app_label in self.djongo_app_labels or
            obj2._meta.app_label in self.djongo_app_labels
        ):
            return True
        # elif (
        #     obj1._meta.app_label in self.psql_app_labels or
        #     obj2._meta.app_label in self.djongo_app_labels
        # ):
        #     print("----->3")
        #     return True
        # elif (
        #     obj1._meta.app_label in self.djongo_app_labels or
        #     obj2._meta.app_label in self.psql_app_labels
        # ):
        #     print("----->4")
        #     return True
        
        # elif obj1._state.db in db_set and obj2._state.db in db_set:
        #     """
        #     Relations between objects are allowed if both objects are
        #     in the primary/replica pool.
        #     """
        #     return None
            # return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        """
        Make sure the auth and contenttypes apps only appear in the
        'afc_psql' database.
        """
        if app_label in self.psql_app_labels:
            return db == 'default'
        if app_label in self.djongo_app_labels:
            return db == 'mongo'
        return db == 'default'
